草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - C++ STL中的二叉搜索树实现?

请问您知道C++STL是否包含二叉搜索树(BST)实现,或者我是否应该构建自己的BST对象?如果STL不包含BST的实现,是否有可用的库?我的目标是能够尽快找到所需的记录:我有一个记录列表(它不应该超过几千个。),我做一个每帧(它是一个电脑游戏)在该列表中搜索。我使用unsignedint作为我感兴趣的记录的标识符。无论哪种方式最快对我来说都是最好的。 最佳答案 您需要一种在给定key的情况下查找某些数据的方法。由于键是unsignedint,这为您提供了多种可能性。当然,你可以使用std::map:typedefstd::mapm

c++ - 为什么 STL 容器优于 MFC 容器?

以前,我使用过CArray和CMap等MFC集合类。一段时间后,我切换到STL容器并使用了一段时间。虽然我发现STL好多了,但我无法指出它的确切原因。一些推理如:它需要MFC:不成立,因为我的程序的其他部分使用了MFC它取决于平台:不成立,因为我只在Windows上运行我的应用程序。(不需要可移植性)在C++标准中定义:好的,但MFC容器仍然可以工作我能想到的唯一原因是我可以在容器上使用算法。还有什么我在这里遗漏的其他原因-是什么让STL容器比MFC容器更好? 最佳答案 RonaldLaeremans,VC++产品部门经理,甚至sa

c++ - 为什么 STL 容器优于 MFC 容器?

以前,我使用过CArray和CMap等MFC集合类。一段时间后,我切换到STL容器并使用了一段时间。虽然我发现STL好多了,但我无法指出它的确切原因。一些推理如:它需要MFC:不成立,因为我的程序的其他部分使用了MFC它取决于平台:不成立,因为我只在Windows上运行我的应用程序。(不需要可移植性)在C++标准中定义:好的,但MFC容器仍然可以工作我能想到的唯一原因是我可以在容器上使用算法。还有什么我在这里遗漏的其他原因-是什么让STL容器比MFC容器更好? 最佳答案 RonaldLaeremans,VC++产品部门经理,甚至sa

c++ - 在 Visual Studio 2015 中检查 STL 容器

我正在运行VisualStudioEnterprise2015,版本14.0.23107.0D14REL。调试C++程序时,我看不到STL容器的内容。我没有选中“在变量窗口中显示对象的原始结构”选项(工具->选项->调试->常规)。这是一个说明问题的例子:#include#include#includeintmain(){std::stringstring="test";std::vectorvector{4,5,6};std::listlist{"one","two","three"};return0;}在Locals或Watch窗口中,我看到以下内容:list[...]()vect

c++ - 在 Visual Studio 2015 中检查 STL 容器

我正在运行VisualStudioEnterprise2015,版本14.0.23107.0D14REL。调试C++程序时,我看不到STL容器的内容。我没有选中“在变量窗口中显示对象的原始结构”选项(工具->选项->调试->常规)。这是一个说明问题的例子:#include#include#includeintmain(){std::stringstring="test";std::vectorvector{4,5,6};std::listlist{"one","two","three"};return0;}在Locals或Watch窗口中,我看到以下内容:list[...]()vect

c++ - 在映射中使用对作为键 (C++/STL)

我想使用STL中的一对作为映射的键。#include#includeusingnamespacestd;intmain(){typedefpairKey;typedefmapMapa;Keyp1("Apple",45);Keyp2("Berry",20);Mapamapa;mapa.insert(p1,"Manzana");mapa.insert(p2,"Arandano");return0;}但是编译器会抛出一堆不可读的信息,而且我对C和C++很陌生。如何在map中使用一对作为键?一般来说,我如何使用任何类型的结构(对象、结构等)作为映射中的键?谢谢! 最

c++ - 在映射中使用对作为键 (C++/STL)

我想使用STL中的一对作为映射的键。#include#includeusingnamespacestd;intmain(){typedefpairKey;typedefmapMapa;Keyp1("Apple",45);Keyp2("Berry",20);Mapamapa;mapa.insert(p1,"Manzana");mapa.insert(p2,"Arandano");return0;}但是编译器会抛出一堆不可读的信息,而且我对C和C++很陌生。如何在map中使用一对作为键?一般来说,我如何使用任何类型的结构(对象、结构等)作为映射中的键?谢谢! 最

c++ - 为什么 STL 容器没有虚拟析构函数?

有人知道为什么STL容器没有虚拟析构函数吗?据我所知,唯一的好处是:它将实例的大小减少了一个指针(指向虚拟方法表),并且它使破坏和构建速度更快。缺点是以通常的方式对容器进行子类化是不安全的。我的问题可以换一种说法是“为什么STL容器没有设计为允许继承?”因为它们不支持继承,当一个人想要一个需要STL功能和少量附加功能的新容器(比如一个专门的构造函数或具有默认值的新访问器)时,就会陷入以下选择。map,或其他):组合和接口(interface)复制:创建一个新的模板或类,它拥有作为私有(private)成员的STL容器,并且每个STL方法都有一个直通内联方法。这与继承一样高效,避免了虚拟

c++ - 为什么 STL 容器没有虚拟析构函数?

有人知道为什么STL容器没有虚拟析构函数吗?据我所知,唯一的好处是:它将实例的大小减少了一个指针(指向虚拟方法表),并且它使破坏和构建速度更快。缺点是以通常的方式对容器进行子类化是不安全的。我的问题可以换一种说法是“为什么STL容器没有设计为允许继承?”因为它们不支持继承,当一个人想要一个需要STL功能和少量附加功能的新容器(比如一个专门的构造函数或具有默认值的新访问器)时,就会陷入以下选择。map,或其他):组合和接口(interface)复制:创建一个新的模板或类,它拥有作为私有(private)成员的STL容器,并且每个STL方法都有一个直通内联方法。这与继承一样高效,避免了虚拟

c++ - 如何处理 RAII 的构造函数失败

我熟悉RAII的优点,但我最近在这样的代码中遇到了一个问题:classFoo{public:Foo(){DoSomething();...}~Foo(){UndoSomething();}}一切正常,除了构造函数...部分中的代码引发了异常,导致UndoSomething()从未被调用。有一些明显的方法可以解决该特定问题,例如将...包装在try/catchblock中,然后调用UndoSomething(),但是:这是重复的代码和b:try/catchblock是我尝试通过使用RAII技术避免的代码异味。而且,如果涉及多个Do/Undo对,代码可能会变得更糟,更容易出错,我们必须中途